/**
 * Copyright © 2019 dream horse Info. Tech Ltd. All rights reserved.
 *
 * @Package: com.github.mybatis.fl.convert
 * @author: flying-cattle
 * @date: 2019年4月9日 下午8:15:25
 */
package com.yz.mybatis.gen.util;

import com.yz.base.boot.entity.JsonResult;
import com.yz.mybatis.gen.entity.BasisInfo;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * 创建文件.
 *
 * @author <a href="mailto:aiks_yuan@163.com">yuanz</a>
 * @date 2022-02-08 16:30
 * @since 1.0.0
 **/
public class FreemarkerUtil {
    
    public static JsonResult createFile(BasisInfo dataModel, String templateName, String filePath) {
        JsonResult result = new JsonResult();
        OutputStreamWriter out = null;
        String fileName = dataModel.getEntityName() + messageStr(templateName);
        try {
            // 通过FreeMarker的Confuguration读取相应的模板文件
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
            // 设置模板路径
            if (StringUtils.isBlank(dataModel.getTemplateDirectory())) {
                configuration.setClassForTemplateLoading(FreemarkerUtil.class, "/freemarker/ftl");
            } else {
                configuration.setDirectoryForTemplateLoading(new File(dataModel.getTemplateDirectory()));
            }
            // 设置默认字体
            configuration.setDefaultEncoding("utf-8");
            // 获取模板
            Template template = configuration.getTemplate(templateName);
            File file = new File(filePath);
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            if (!file.exists()) {
                file.createNewFile();
            } else {
                result.setCode(-1);
                result.setMessage("已经存在" + fileName);
                return result;
            }
            
            //设置输出流
            out = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
            //模板输出静态文件
            template.process(dataModel, out);
            result.setCode(1);
            result.setMessage("创建" + fileName + "成功");
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        result.setCode(-1);
        result.setMessage("创建" + fileName + "失败");
        return result;
    }
    
    public static String messageStr(String name) {
        if (name.equals("entity.ftl")) {
            name = ".java";
        } else if (name.equals("dao.ftl")) {
            name = "Dao.java";
        } else if (name.equals("mapper.ftl")) {
            name = "Mapper.xml";
        } else if (name.equals("service.ftl")) {
            name = "Service.java";
        } else if (name.equals("serviceImpl.ftl")) {
            name = "ServiceImpl.java";
        } else if (name.equals("controller.ftl")) {
            name = "Controller.java";
        }
        return name;
    }
}
